home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1997-04-02 | 14.9 KB | 690 lines |
- '----------------------------------------------------
- ' david v2.o
- '----------------------------------------------------
- ' keller@vip.cybercity.dk
- ' rune keller
- ' sporuplundsvej 105
- ' dk-8472 sporup
- '----------------------------------------------------
- ' finished o2/o4/1997 13:36:22
- '----------------------------------------------------
-
- Screen Open 0,640,256,4,Hires
- Palette $AAA,$FFF,$0,$68B,,,,,,,,,,,,,,$FE8,$F40,$0
- Limit Mouse 128,42 To 128+319,42+255
- Colour Back $AAA
- Flash Off
- Curs Off
- Cls 0
-
-
-
- _BUTTONS=32
-
- Reserve Zone _BUTTONS
-
-
-
- Dim _BUT_XPOS(_BUTTONS)
- Dim _BUT_YPOS(_BUTTONS)
- Dim _BUT_WIDTH(_BUTTONS)
- Dim _BUT_HEIGHT(_BUTTONS)
- Dim _BUT_TEXT$(_BUTTONS)
- Dim _BUT_TYPE(_BUTTONS)
-
- Global _BUT_XPOS()
- Global _BUT_YPOS()
- Global _BUT_WIDTH()
- Global _BUT_HEIGHT()
- Global _BUT_TEXT$()
- Global _BUT_TYPE()
-
- Dim _CELL(99)
-
- Global _CELL()
-
-
-
- _A_BUFFER=0
- _P_COUNTER=0
- _EDIT=False
- _CURRENT_CELL=0
- _CELL_OFFSET=0
-
-
-
- _BUTTON[-1,0,0,1000,1000,"",0]
-
- _BUTTON[-1,50,50,350,100,"A Buffer",2]
- _BUTTON[10,75,75,300,50,Str$(_A_BUFFER)-" ",1]
-
- _BUTTON[-1,50,200,350,100,"P Counter",2]
- _BUTTON[11,75,225,300,50,Str$(_P_COUNTER)-" ",1]
-
- _BUTTON[-1,50,350,350,275,"Input",2]
- _BUTTON[-1,75,375,300,225,"",1]
-
- _BUTTON[-1,50,675,350,275,"Output",2]
- _BUTTON[-1,75,700,300,225,"",1]
-
- _BUTTON[-1,450,50,500,775,"Cells",2]
- _BUTTON[-1,475,75,150,725,"",1]
- _BUTTON[-1,625,75,150,725,"",1]
- _BUTTON[-1,775,75,150,725,"",1]
-
- _BUTTON[20,450,875,100,75,"Run",0]
- _BUTTON[21,550,875,100,75,"Edit",0]
- _BUTTON[22,650,875,100,75,"Load",0]
- _BUTTON[23,750,875,100,75,"Save",0]
- _BUTTON[24,850,875,100,75,"Quit",0]
-
-
-
- _SHOW_CELL[_CELL_OFFSET,-1,-1]
-
-
-
- Do
-
-
-
- _BEGIN:
-
- _INPUT$=Inkey$
- _SCANCODE=Scancode
-
- If _SCANCODE>0
- Clear Key
- End If
-
-
-
- If _EDIT=True
-
- If _SCANCODE=78
-
- _DUMMY=1
- _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
- Else If _SCANCODE=79
-
- _DUMMY=0
- _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
- Else If _SCANCODE=66
-
- Add _DUMMY,1,0 To 1
- _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
- Else If _SCANCODE=68 or _SCANCODE=67 or _SCANCODE=77
-
- If _CURRENT_CELL<99
-
- If _SCANCODE<>77
- _DUMMY=0
- End If
-
- Inc _CURRENT_CELL
-
- If _CURRENT_CELL-_CELL_OFFSET>15
- Inc _CELL_OFFSET
- End If
-
- _SHOW_CELL[_CELL_OFFSET,-1,-1]
- _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
- End If
-
- Else If _SCANCODE=76 or _SCANCODE=65
-
- If _CURRENT_CELL>0
-
- Dec _CURRENT_CELL
-
- If _CURRENT_CELL<_CELL_OFFSET
- Dec _CELL_OFFSET
- End If
-
- _SHOW_CELL[_CELL_OFFSET,-1,-1]
- _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
- End If
-
- Else If _SCANCODE=69
-
- _EDIT=False
- _SHOW_CELL[_CELL_OFFSET,-1,-1]
-
- End If
-
- If _INPUT$=>"0" and _INPUT$<="9"
-
- If _DUMMY=0
- _TEMP=1000*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),2,1))
- _TEMP=_TEMP+100*Val(_INPUT$)
- _TEMP=_TEMP+10*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),3,1))
- _TEMP=_TEMP+Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),4,1))
- Else If _DUMMY=1
- _TEMP=1000*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),1,1))
- _TEMP=_TEMP+100*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),2,1))
- _TEMP=_TEMP+10*Val(Mid$(Right$("0000"+Str$(_CELL(_CURRENT_CELL))-" ",4),4,1))
- _TEMP=_TEMP+Val(_INPUT$)
- End If
-
- _CELL(_CURRENT_CELL)=_TEMP
-
- _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
- End If
-
- End If
-
-
-
- If _INPUT=True
-
- If _SCANCODE=68 or _SCANCODE=67
-
- _END_INPUT=True
-
- _TEXT$=" "
-
- _XPOS=100+(250/2)
- _YPOS=475
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- Gr Writing 1
- Ink 2,3
-
- Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
-
- End If
-
- If _INPUT$=>"0" and _INPUT$<="9" and Len(_NEW_INPUT$)<4
-
- _NEW_INPUT$=_NEW_INPUT$+_INPUT$
-
- _TEXT$=" "+_NEW_INPUT$+" "
-
- _XPOS=100+(250/2)
- _YPOS=475
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- Gr Writing 1
- Ink 2,3
-
- Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
-
- End If
-
- If Timer mod 20=0
-
- _TEXT$=_NEW_INPUT$
-
- _XPOS=100+(250/2)
- _YPOS=475
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- Gr Writing 1
- Ink ,2
-
- Text _XPOS+Text Length(_TEXT$)/2,_YPOS+Text Base," "
-
- Else If Timer mod 20=10
-
- _TEXT$=_NEW_INPUT$
-
- _XPOS=100+(250/2)
- _YPOS=475
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- Gr Writing 1
- Ink ,3
-
- Text _XPOS+Text Length(_TEXT$)/2,_YPOS+Text Base," "
-
- End If
-
- End If
-
-
-
- _CHECK_BUTTONS
-
-
-
- If Param=10
-
- Else If Param=11
-
- Else If Param=20
-
- _EDIT=False
- _RUN=True
- _P_COUNTER=0
- _COMMAND=-1
-
- _SHOW_CELL[_CELL_OFFSET,-1,-1]
-
- Else If Param=21
-
- _RUN=False
- _EDIT=True
- _INPUT=False
-
- _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
- Else If Param=22
-
- Else If Param=23
-
- Else If Param=24
-
- End
-
- End If
-
-
-
- Multi Wait
-
-
-
- If _RUN=True
-
- If _COMMAND=-1
-
- _BUTTON[-1,75,225,300,50,Str$(_P_COUNTER)-" ",1]
-
- _COMMAND=Val(Left$(Right$("0000"+Str$(_CELL(_P_COUNTER))-" ",4),2))
- _VALUE=Val(Right$(Right$("0000"+Str$(_CELL(_P_COUNTER))-" ",4),2))
-
- End If
-
- If _COMMAND=0
-
- Else If _COMMAND=1
-
- _RUN=False
-
- Else If _COMMAND=2
-
- _A_BUFFER=_CELL(_VALUE)
- _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
-
- Else If _COMMAND=3
-
- _CELL(_VALUE)=_A_BUFFER
-
- If _CELL(_VALUE)>9999
- _CELL(_VALUE)=_CELL(_VALUE) mod 9999
- Else If _CELL(_VALUE)<-9999
- _CELL(_VALUE)=-1*(Abs(_CELL(_VALUE)) mod 9999)
- End If
-
- _SHOW_CELL[_CELL_OFFSET,-1,-1]
-
- Else If _COMMAND=4
-
- _A_BUFFER=_A_BUFFER+_CELL(_VALUE)
- _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
-
- Else If _COMMAND=5
-
- _A_BUFFER=_A_BUFFER-_CELL(_VALUE)
- _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
-
- Else If _COMMAND=6
-
- _A_BUFFER=_A_BUFFER*_CELL(_VALUE)
- _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
-
- Else If _COMMAND=7
-
- If _CELL(_VALUE)=0
-
- _RUN=False
-
- _TEXT$=" Division by zero! "
-
- _XPOS=100+(250/2)
- _YPOS=800
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- Gr Writing 1
- Ink 2,3
-
- Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
-
- Else
-
- _A_BUFFER=_A_BUFFER/_CELL(_VALUE)
-
- End If
- _BUTTON[-1,75,75,300,50,Str$(_A_BUFFER)-" ",1]
-
- Else If _COMMAND=8
-
- If _INPUT=False
-
- _NEW_INPUT$=""
- _INPUT=True
- _END_INPUT=False
-
- Goto _BEGIN
-
- Else If _INPUT=True and _END_INPUT=True
-
- _INPUT=False
-
- _CELL(_VALUE)=Val(_NEW_INPUT$)
-
- If _CELL(_VALUE)>9999
- _CELL(_VALUE)=_CELL(_VALUE) mod 9999
- Else If _CELL(_VALUE)<-9999
- _CELL(_VALUE)=-1*(Abs(_CELL(_VALUE)) mod 9999)
- End If
-
- _SHOW_CELL[_CELL_OFFSET,-1,-1]
-
- Else
-
- Goto _BEGIN
-
- End If
-
- Else If _COMMAND=9
-
- _TEXT$=Str$(_CELL(_VALUE))-" "
-
- _TEXT$=" "+_TEXT$+" "
-
- _XPOS=100+(250/2)
- _YPOS=800
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- Gr Writing 1
- Ink 2,3
-
- Text _XPOS-Text Length(_TEXT$)/2,_YPOS+Text Base,_TEXT$
-
- Else If _COMMAND=10
-
- _P_COUNTER=_VALUE-1
-
- Else If _COMMAND=11
-
- If _A_BUFFER=0
-
- _P_COUNTER=_VALUE-1
-
- End If
-
- Else If _COMMAND=12
-
- If _A_BUFFER<0
-
- _P_COUNTER=_VALUE-1
-
- End If
-
- End If
-
- Inc _P_COUNTER
-
- If _P_COUNTER=100
- _RUN=False
- End If
-
- _COMMAND=-1
-
- End If
-
-
-
- Loop
-
-
-
- Procedure _SHOW_CELL[_CELL_OFFSET,_CURRENT_CELL,_DUMMY]
-
-
-
- If _CURRENT_CELL=-1
-
- _START=0
- _END=15
-
- Else
-
- _START=_CURRENT_CELL-_CELL_OFFSET
- _END=_START
-
- End If
-
- For _CELL=_START To _END
-
- _TEXT$=" "+Right$("00"+Str$(_CELL_OFFSET+_CELL)-" ",2)+" "
-
- _XPOS=550-Text Length(_TEXT$)/2
- _YPOS=75+(725/2)-(8*40)+_CELL*40
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- Gr Writing 1
-
- If _START=_END
- Ink 2,1
- Else
- Ink 2,3
- End If
-
- Text _XPOS,_YPOS+Text Base,_TEXT$
-
-
-
- _TEXT$=" "+Left$(Right$("0000"+Str$(_CELL(_CELL_OFFSET+_CELL))-" ",4),2)+" "
-
- _XPOS=700-Text Length(_TEXT$)/2
- _YPOS=75+(725/2)-(8*40)+_CELL*40
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- If _START=_END and _DUMMY=0
- Ink 2,1
- Else
- Ink 2,3
- End If
-
- Text _XPOS,_YPOS+Text Base,_TEXT$
-
-
-
- _TEXT$=" "+Right$(Right$("0000"+Str$(_CELL(_CELL_OFFSET+_CELL))-" ",4),2)+" "
-
- _XPOS=850-Text Length(_TEXT$)/2
- _YPOS=75+(725/2)-(8*40)+_CELL*40
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
-
- If _START=_END and _DUMMY=1
- Ink 2,1
- Else
- Ink 2,3
- End If
- Text _XPOS,_YPOS+Text Base,_TEXT$
-
- Next
-
-
-
- End Proc
-
-
-
- Procedure _BUTTON[_ZONE,_XPOS,_YPOS,_WIDTH,_HEIGHT,_TEXT$,_TYPE]
-
-
-
- If _ZONE>-1
-
- _BUT_XPOS(_ZONE)=_XPOS
- _BUT_YPOS(_ZONE)=_YPOS
- _BUT_WIDTH(_ZONE)=_WIDTH
- _BUT_HEIGHT(_ZONE)=_HEIGHT
- _BUT_TEXT$(_ZONE)=_TEXT$
- _BUT_TYPE(_ZONE)=_TYPE
-
- End If
-
-
-
- _XPOS=(_XPOS*Screen Width)/1000
- _YPOS=(_YPOS*Screen Height)/1000
- _WIDTH=(_WIDTH*Screen Width)/1000
- _HEIGHT=(_HEIGHT*Screen Height)/1000
-
-
-
- If _ZONE>-1
-
- Set Zone _ZONE,_XPOS,_YPOS To _XPOS+_WIDTH,_YPOS+_HEIGHT
-
- End If
-
-
-
- If _TYPE=0
-
- Ink 1
- Draw _XPOS,_YPOS To _XPOS+_WIDTH-2,_YPOS
- Draw _XPOS,_YPOS+1 To _XPOS,_YPOS+_HEIGHT-1
- Draw _XPOS+1,_YPOS+1 To _XPOS+1,_YPOS+_HEIGHT-2
-
- Ink 2
- Draw _XPOS+1,_YPOS+_HEIGHT-1 To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-1
- Draw _XPOS+_WIDTH-2,_YPOS+1 To _XPOS+_WIDTH-2,_YPOS+_HEIGHT-2
- Draw _XPOS+_WIDTH-1,_YPOS To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-2
-
- Ink 0
- Bar _XPOS+2,_YPOS+1 To _XPOS+_WIDTH-3,_YPOS+_HEIGHT-2
-
- Gr Writing 0
- Ink 2,0
-
- Text _XPOS+_WIDTH/2-Text Length(_TEXT$)/2,_YPOS+_HEIGHT/2+Text Base-4,_TEXT$
-
- Else If _TYPE=1
-
- Ink 2
- Draw _XPOS,_YPOS To _XPOS+_WIDTH-2,_YPOS
- Draw _XPOS,_YPOS+1 To _XPOS,_YPOS+_HEIGHT-1
- Draw _XPOS+1,_YPOS+1 To _XPOS+1,_YPOS+_HEIGHT-2
-
- Ink 1
- Draw _XPOS+1,_YPOS+_HEIGHT-1 To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-1
- Draw _XPOS+_WIDTH-2,_YPOS+1 To _XPOS+_WIDTH-2,_YPOS+_HEIGHT-2
- Draw _XPOS+_WIDTH-1,_YPOS To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-2
-
- Ink 3
- Bar _XPOS+2,_YPOS+1 To _XPOS+_WIDTH-3,_YPOS+_HEIGHT-2
-
- Gr Writing 0
- Ink 2,0
-
- Text 1+_XPOS+_WIDTH/2-Text Length(_TEXT$)/2,1+_YPOS+_HEIGHT/2+Text Base-4,_TEXT$
-
- Else If _TYPE=2
-
- Ink 1
- Draw _XPOS,_YPOS To _XPOS+_WIDTH-2,_YPOS
- Draw _XPOS,_YPOS+1 To _XPOS,_YPOS+_HEIGHT-1
- Draw _XPOS+1,_YPOS+1 To _XPOS+1,_YPOS+_HEIGHT-2
-
- Ink 2
- Draw _XPOS+1,_YPOS+_HEIGHT-1 To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-1
- Draw _XPOS+_WIDTH-2,_YPOS+1 To _XPOS+_WIDTH-2,_YPOS+_HEIGHT-2
- Draw _XPOS+_WIDTH-1,_YPOS To _XPOS+_WIDTH-1,_YPOS+_HEIGHT-2
-
- Ink 0
- Bar _XPOS+2,_YPOS+1 To _XPOS+_WIDTH-3,_YPOS+_HEIGHT-2
-
- Gr Writing 1
- Ink 2,0
-
- _TEXT$=" "+_TEXT$+" "
- Text _XPOS+_WIDTH/2-Text Length(_TEXT$)/2,_YPOS+Text Base-4,_TEXT$
-
- End If
-
-
-
- End Proc
-
- Procedure _CHECK_BUTTONS
-
-
-
- _MOUSE_KEY=Mouse Key
- _MOUSE_ZONE=Mouse Zone
-
- If _MOUSE_KEY>0 and _MOUSE_ZONE>0
-
- _BUTTON=_MOUSE_ZONE
- _ACTIVE=True
- _TYPE=_BUT_TYPE(_BUTTON)
-
- If _TYPE mod 2=0
- _NEW_TYPE=_TYPE+1
- Else
- _NEW_TYPE=_TYPE-1
- End If
-
- _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_NEW_TYPE]
-
- Repeat
-
- If _ACTIVE=True and Mouse Zone<>_MOUSE_ZONE
-
- _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_TYPE]
- _ACTIVE=False
-
- Else If _ACTIVE=False and Mouse Zone=_MOUSE_ZONE
-
- _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_NEW_TYPE]
- _ACTIVE=True
-
- End If
-
- Until Mouse Key=0
-
- If _ACTIVE=True
-
- _BUTTON[-1,_BUT_XPOS(_BUTTON),_BUT_YPOS(_BUTTON),_BUT_WIDTH(_BUTTON),_BUT_HEIGHT(_BUTTON),_BUT_TEXT$(_BUTTON),_TYPE]
-
- End If
-
- If _MOUSE_KEY=1
- Pop Proc[_BUTTON]
- End If
-
- End If
-
-
-
- End Proc[-1]